//
//  NSCondition.swift
//  sinaDemo
//
//  Created by admin on 2021/7/14.
//

import UIKit

class NSConditionDemo: LockBase {
    /*
     NSCondition也是条件锁，pthread的OC封装，也遵循了NSLocking协议。可以直接加锁解锁。
     */
    var condition:NSCondition = NSCondition.init()
    /*
     条件锁，举个例子🌰（同一个数组，一个add 另一个remove，remove得等数组不为空才remove，但是不同的异步线程进行增删操作。所以可以用到条件锁开进行控制）
     */
    //条件锁的测试
    private func condLockTest(){
        //加锁
        condition.lock()
        print("condLockTest")
        //线程休眠，并且释放锁
        condition.wait()
        print("继续执行condLockTest")
        //解锁
        condition.unlock()
    }
    private func condLockTest1(){
        //加锁
        condition.lock()
        print("condLockTest1")
        //通知condLockTest其他线程，停止睡眠，将要继续执行，但是此时还未解锁，所以等到下面解锁后，会立即执行唤醒其他睡眠线程的操作
        condition.signal()
        //广播给所有的符合条件的线程
//        condition.broadcast()
        print("继续执行condLockTest1")
        //解锁
        condition.unlock()
    }
}
